package com.kpl.kplstzble.downkplfile;


import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtils {
    public static  String SDPATH;
    //public static  String VERSIONPATH="/storage/emulated/0";

    public FileUtils() {
        /**得到当前外部存储设备的根目录*/
        SDPATH = Environment.getExternalStorageDirectory() + "/";
       // SDPATH=" /storage/emulated/0/Android/data/";
    }

    /**
     * 在SD卡上创建文件
     */
    public File creadSDFile(String fileName) throws IOException {
        File file = new File(SDPATH + fileName);
        return file;
    }

    /**
     * 在SD卡上创建目录
     */
    public File creadSDDir(String dirName) {
        File dir = new File(SDPATH + dirName);
        boolean mkdir= dir.mkdir();
        return dir;
    }

    /**
     * 判断SD卡上的文件是否存在
     */
    public boolean isFileExist(String fileName) {
        File file = new File(SDPATH + fileName);
        return file.exists();
    }

    /**
     * 讲一个InputStream里面的数据写到SD卡中
     * path :写入的路径（目录）
     * fileName :文件名
     * inputStream  :携带数据的输入流
     *
     * 返回值 File：写入后的文件所对应的对象
     */
    public File writeInputStream2SD(String path, String fileName, InputStream inputStream) {
        File file = null;
        OutputStream outputStream = null;
        try {
            /**
             * 要讲一个文件写到SD卡里面
             * 1.先创建一个目录
             * 2.在这个目录里面创建一个文件
             * 3.把要写入的文件数据写到创建好的文件里面
             * */
            //创建一个目录
            creadSDDir(path);
            //创建一个文件
            file = creadSDFile(path + fileName);
            //根据这个文件对象创建一个输出流，这个输出流将会对这个文件写入数据
            outputStream = new FileOutputStream(file);
            //创建一个4K的字节缓存
            byte buffer[] = new byte[1];
            /**
             * 先从输入流里面读取4K字节数据到buffer里面
             * 再把这个数据通过输出流写入到文件中
             * 每次读写4K直到全部读取并写入完毕
             * */
            while ((inputStream.read(buffer) != -1)) {
                outputStream.write(buffer);
            }
            //操作完毕后晴空下输出流
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭输出流
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return file;
    }
}
